#include <errno.h>
#include <fcntl.h>
#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#define BUF_MAX_SIZE 8192

int main(){
    int pipefd[2];
    int flag = 0;
    ssize_t n;
    char buf[BUF_MAX_SIZE];
    memset(buf, 0, BUF_MAX_SIZE);
    pipe(pipefd);
    pid_t pid = 1;
    pid = fork();
    if (pid == 0){
            int count = 0;
            close(pipefd[0]);
            int flags = fcntl(pipefd[1], F_GETFL);
    // 管道默认是阻塞写，通过`fcntl`设置成非阻塞写，在管道满无法继续写入时返回-EAGAIN，作为循环终止条件
            fcntl(pipefd[1], F_SETFL, flags | O_NONBLOCK);
            // 写入管道
            while (!flag)
            {
                n = write(pipefd[1], buf, 1);
                if (n == -1)
                {
                    flag = 1;
                }
                else
                {
                    count++;
                }
            }
            printf("space = %dKB\n", count/ 1024);
            exit(0);
    }
    return 0;
}